package com.example.controller;

import com.example.entity.Users;
import com.example.entity.Volunteer;
import com.example.service.VolunteerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 志愿者信息管理控制器
 * 负责处理志愿者信息的增删改查(CRUD)操作
 * 基础访问路径：/volunteer
 */
@Controller
@RequestMapping("/volunteer")
public class VolunteerController {

    @Autowired
    private VolunteerService volunteerService; // 自动注入志愿者服务层

    /**
     * 获取所有志愿者列表
     * @param model Spring MVC模型对象，用于向视图传递数据
     * @return 返回志愿者列表视图路径
     */
    @GetMapping("/list")
    public String list(Model model) {
        // 从服务层获取所有志愿者数据
        List<Volunteer> volunteer = volunteerService.getAllVolunteer();
        // 将志愿者列表数据添加到模型
        model.addAttribute("volunteer", volunteer);
        // 返回Thymeleaf模板路径
        return "volunteer/list";
    }

    /**
     * 跳转到添加志愿者页面
     * @return 返回添加志愿者表单视图路径
     */
    @GetMapping("/add")
    public String toAddPage() {
        return "volunteer/add";
    }

    /**
     * 添加新志愿者
     * @param volunteer 表单提交的志愿者数据对象
     * @param userid 关联的用户ID
     * @return 重定向到志愿者列表页面
     */
    @PostMapping("/add")
    public String add(Volunteer volunteer, int userid) {
        // 创建并设置关联用户
        Users users = new Users();
        users.setUserid(userid);
        volunteer.setUsers(users);
        // 调用服务层保存志愿者信息
        volunteerService.addVolunteer(volunteer);
        // 操作完成后重定向到列表页
        return "redirect:/volunteer/list";
    }

    /**
     * 跳转到编辑志愿者页面
     * @param volunteer_id 要编辑的志愿者ID
     * @param model Spring MVC模型对象
     * @return 返回志愿者编辑表单视图路径
     */
    @GetMapping("/edit/{volunteer_id}")
    public String toEditPage(@PathVariable("volunteer_id") Integer volunteer_id, Model model) {
        // 根据ID从服务层获取志愿者信息
        Volunteer volunteer = volunteerService.getVolunteerByVolunteer_Id(volunteer_id);
        // 将志愿者数据添加到模型
        model.addAttribute("volunteer", volunteer);
        // 返回编辑页面视图
        return "volunteer/edit";
    }

    /**
     * 更新志愿者信息
     * @param volunteer 表单提交的志愿者数据对象
     * @return 重定向到志愿者列表页面
     */
    @PostMapping("/edit")
    public String edit(Volunteer volunteer) {
        // 调用服务层更新志愿者信息
        volunteerService.updateVolunteer(volunteer);
        // 操作完成后重定向到列表页
        return "redirect:/volunteer/list";
    }

    /**
     * 删除志愿者
     * @param volunteer_id 要删除的志愿者ID
     * @return 重定向到志愿者列表页面
     */
    @GetMapping("/delete/{volunteer_id}")
    public String delete(@PathVariable("volunteer_id") Integer volunteer_id) {
        // 调用服务层删除指定ID的志愿者
        volunteerService.deleteVolunteer(volunteer_id);
        // 操作完成后重定向到列表页
        return "redirect:/volunteer/list";
    }

    /**
     * 搜索志愿者
     * @param name 志愿者姓名(可选)
     * @param sex 志愿者性别(可选)
     * @param model Spring MVC模型对象
     * @return 返回志愿者列表视图路径(包含搜索结果)
     */
    @GetMapping("/search")
    public String searchVolunteer(
            @RequestParam(required = false) String name,
            @RequestParam(required = false) String sex,
            Model model) {

        List<Volunteer> volunteer;
        // 检查是否有搜索条件
        if (StringUtils.hasText(name) || StringUtils.hasText(sex)) {
            // 有条件时执行搜索
            volunteer = volunteerService.searchVolunteer(name, sex);
        } else {
            // 无条件时获取全部志愿者
            volunteer = volunteerService.getAllVolunteer();
        }

        // 将搜索结果和搜索条件回显到页面
        model.addAttribute("volunteer", volunteer);
        model.addAttribute("name", name);
        model.addAttribute("sex", sex);

        // 返回列表页面(显示搜索结果)
        return "volunteer/list";
    }
}